package SmallChangeSys.oop;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*
    该类是完成零钱通各个功能的类
    使用oop
    将各个功能对应一个方法
     */
public class SmallChangeSysOOP {

    //定义(属性)相关变量
    boolean loop = true;//用来控制显示菜单的
    Scanner scanner = new Scanner(System.in);
    String key = "";
    //（1）可以把收益入账和消费，保存到数组 （2）可以使用对象 （3）简单可以使用String
    String details = "----------------零钱通明细oop----------------";
    //定义新的变量
    double money = 0;
    double balance = 0;
    Date date = null;//data 是 java.util.Date 类型，表示日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm");
    //可以用于日期格式化
    //定义新变量，保存消费的原因
    //1.显示菜单，并可以选择
    String note = "";
    public void mainMenu(){
        do {
            System.out.println("\n===========零钱通菜单oop===========");
            System.out.println("\t\t\t1 零钱通明细");
            System.out.println("\t\t\t2 收益入账");
            System.out.println("\t\t\t3 消费");
            System.out.println("\t\t\t4 退出");
            System.out.println("请选择(1-4): ");
            key = scanner.next();
            //使用switch分支控制
            switch (key){
                case "1":
                    this.detail();
                    break;
                case "2":
                    this.income();
                         break;
                case "3":
                    this.pay();
                        break;
                case "4":
                    this.exit();
                    break;
                default:
                    System.out.println("输入有误，请重新选择");
            }
        }while (loop);
    }
    //2.完成零钱通明细
    public  void detail(){
        System.out.println(details);
    }
    //3.完成收益入账
    public void income(){
        System.out.print("收益入账金额：");
        money = scanner.nextDouble();
        //money的值范围要校验
        //找出不正确的金额条件，然后给出提示，就直接break(编程思想！！！)
        if(money <= 0){
            System.out.println("金额收益需要大于0");
            return;//退出方法，不再执行后面代码
        }
        //找出正确的金额条件
        balance += money;
        date = new Date();//获取当前日期
        //拼接收益入账信息到details
        details += "\n收益入账：+" + money + "\t" + sdf.format(date)
                + "\t" + "余额：" + balance;
    }
    //4.完成消费记录
    public void pay(){
        System.out.println("消费金额：");
        money = scanner.nextDouble();
        //money的值范围要校验
        //找出不正确的金额条件，然后给出提示，就直接break(编程思想！！！)
        if(money <= 0 || money > balance){
            System.out.println("金额收益需要大于0或者在收益入账范围之内！");
            return;//退出方法，不再执行后面代码
        }
        System.out.println("消费说明：");
        note = scanner.next();
        balance -= money;
        //拼接消费信息到details
        date = new Date();//获取当前日期
        details += "\n消费记录："  + note + "\t" + "-"  + money + "\t" + sdf.format(date) + "\t"
                + "余额：" + balance;
    }
    //5.退出
    public void exit(){
        String choice = " ";
        while (true){
            System.out.println("确定退出？y/n");
            choice =scanner .next();
            if("y".equals(choice)|| "n".equals(choice) ){
                break;
            }
        }
        //当用户退出while后，进行判断
        if(choice.equals("y")){
            loop = false;
        }
    }
}
